// 示例 1：

// 输入：n = 3
// 输出：["((()))", "(()())", "(())()", "()(())", "()()()"]
// 示例 2：

// 输入：n = 1
// 输出：["()"]

n = 3

var generateParenthesis = function (n) {
    let result = []
    let str = ''
    let left = 0 // 左括号的数量
    let right = 0 // 右括号的数量

    function dfs(str, left, right) {
        if (str.length === 2 * n) { // 当str的长度等于2n时，收集结果
            result.push(str);
            return;
        }
        if (left < n) { // 当左括号的数量小于n时，允许添加左括号
            dfs(str + '(', left + 1, right);
        }
        if (right < left) { // 当右括号的数量小于左括号时，允许添加右括号
            dfs(str + ')', left, right + 1);
        }
    }
    dfs(str, left, right)
    return result;
};

console.log(generateParenthesis(n));
